MySQL触发器 (通过Navicat 编辑)

您所在的位置:网站首页 navicat 编辑数据 MySQL触发器 (通过Navicat 编辑)

MySQL触发器 (通过Navicat 编辑)

2023-09-24 05:29| 来源: 网络整理| 查看: 265

文章目录 1、触发器的概念2、触发器的作用3、MySQL 语法4、简单的示例5、效果

1、触发器的概念

触发器(trigger)是MySQL提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(insert,delete, update)时就会激活它执行

2、触发器的作用 可在写入数据表前,强制检验或转换数据。触发器发生错误时,异动的结果会被撤销。部分数据库管理系统可以针对数据定义语言(DDL)使用触发器,称为DDL触发器。可依照特定的情况,替换异动的指令 (INSTEAD OF)。 3、MySQL 语法

DELIMITER | CREATE TRIGGER . < [ BEFORE | AFTER ] > < [ INSERT | UPDATE | DELETE ] > ON [dbo] //dbo代表该表的所有者 FOR EACH ROW BEGIN –do something END |

4、简单的示例

现在我用两个表 一个是 A表 一个是B表 我想在A表更新数据的时候 给B表添加一条 记录 (类似于日常使用的Log)应用场景如:记录用户的余额变动 记录登陆日志 等

我这里先简单的实现一下 A表结构

CREATE TABLE `a` ( `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, `text` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

B表结构

CREATE TABLE `b` ( `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, `type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0), PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

比如说 我在A表 修改的时候 在B中存储一条 记录修改 之前的数据 在A表中添加触发器 在这里插入图片描述

触发器部分 应该很好理解 名:就是定义个名字 触发:有两个参数 BEFORE就是在 之前操作执行 AFTER 就是在操作之后执行 插入:当A表 执行插入新数据的时候 执行 更新:当A表 执行更新数据的时候 执行 删除:当A表 执行删除数据的时候 执行

重要 定义:这里要写 你要执行的 SQL语句 语法参看一下 3、MySQL 语法 在这里插入图片描述 在Navicat中定义

BEGIN INSERT INTO `test`.`b`(`id`, `type`, `time`) VALUES ('', old.text, NOW()); END

要注意 代码中的 old 代表 修改之前的数据 如果想用处理之后的 数据 就用 new 就可以

这里就简单的写了一个 添加log的 小demo吧 如果想做其他的操作 就在这里处理就可以 自己写一下 SQL语句

5、效果

A表数据 在这里插入图片描述 B表数据 在这里插入图片描述 当A表中一项发生修改时: 修改的id为3 在这里插入图片描述 B表会添加一条记录 记录A表id为3修改之前的数据 在这里插入图片描述

注意:我在使用时候初次添加保存的时候 mysql报错 权限不足 我给了最高权限就可以保存了



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3